home *** CD-ROM | disk | FTP | other *** search
/ Mind Run / Mind Run (1991)(Crealude)(FR)(M6)[!][CFI MINDRUM 91148].iso / so48.amos / so48.amosSourceCode
AMOS Source Code  |  2008-12-15  |  38KB  |  1,086 lines

  1. '                            So48                           16  4  91    
  2. Set Buffer 20 : Close Workbench : Close Editor : Randomize Timer
  3. If Exist("CFI:") : Dir$="CFI:" : Else Dir$="GIGUNA:GAMOS/" : End If 
  4. '
  5. Dim TPTS(6),ZBUT(28),BBUT(28),ZBI(36),RSV(16,2),H(28),V(28),CPL(8,3),LS(5)
  6. Dim XB(2),YB(2),Z(36),CUR(12,9,2),GAM$(12),PREF(5),SON(14,6,3),F$(36)
  7. Global TEST,TPTS(),TEMPS,PTS,APTS,NBK,NBI,NB,NBUT,ZBUT(),BBUT(),DIFF,LS()
  8. Global BUT$,SG$,SA$,SB$,ZBI(),RSV(),H(),V(),CPL(),XB(),YB(),Z(),CUR(),HCR,VCR
  9. Global BBOULE,XT,YT,XH,YH,XR,YR,BCUR,HCURS,VCURS,XC,YC,XP,YP,CX,CY,SON()
  10. Global BCP,CYCLETAPE,ETAPE,QST,MXETAPE,DIFF,DERANN$,ELTEMPS,GAUCHE
  11. Global DUREE,VITESSE,BZN,MZ,ABANDON,RENOUV$,TSAB,TREN,LANGUE$,TEST$
  12. Global LIGNE,DIT,GAM$(),PREF(),BOUTONS,BOUTONA,BOUTONB,FAITMUSE,FERMEDES
  13. Global BOULBK,CRSBK,FLCHBK,CERVBK,BASEBLOCK,F$(),DC,DIT7,DIT8,FERME7
  14. '
  15. TEST$="Sounds" : TEST=3 : NBUT=1 : ZBUT(NBUT)=BZN+1 : INITEST
  16. Load "banqueI/Titror"+LANGUE$+".ABK" : Paste Icon 20,48,TEST
  17. FERME7=False
  18. '
  19. BANQBI["A.wurlyp",""] : EQUALISE
  20. Procedure EQUALISE
  21.    Channel 2 To Bob 2 : Bob 2,15,127,L+1 : Wait Vbl 
  22.    Amal 2,"R: L R1=R0+Z(3); A 1,(R1,5);P P P P P J R" : Amreg(2,0)=L+1
  23.    Amal On 2
  24. End Proc
  25. ''''''''''''''''''''''' Boucle de test ''''''''''''''''''''''''''''''' 
  26. While ETAPE<MXETAPE and Not ABANDON
  27.    PAUSEPOINTS : If Param=3 Then Amal Off : Bob Off : AJOUR : Exit 
  28.    '
  29.    VOISTEST : PTS=Min(9,2*DIFF) : PTS=Max(3,PTS) : METPOINTS
  30.    VITESSE=60-5*DIFF : DUREE=$FFFF : Rem Max(1,3-DIFF)
  31.    For X=1 To 36 : ZBI(X)=0 : Next : Amal Off 2 : Bob Off 2 : AJOUR
  32.    VIDCUR[1]
  33.    Q$=Str$(QST)-" "
  34.    Erase 2 : Load "BanqueI/A.juke"+Q$+".abk" : Paste Icon 440-DC-20,75,1
  35.    B$="A.Wurly"+Q$ : BANQBI[B$,""] : TEMPS[0]
  36.    'If ETAPE<3 Then PARLE["listen",1] 
  37.    NB=Min(6,DIFF+2) : For N=0 To 12 : For S=0 To 6 : For T=0 To 3
  38.    SON(N,S,T)=0 : Next : Next : Next : SON(0,0,0)=NB
  39.    On QST Proc SAME,NOREP,ISTRUMENT,INQLU,NONINC,RVERS,CONT,NOCONT
  40.    '
  41.    BRUIT[0,0,"tiroircaiss2"] : If BOUTONB and(PREF(4)=1) Then PREF(4)=0
  42.    GAUCHE[3,45]
  43.    For N=1 To NB : Bob N,,,NBK+16 : Wait Vbl : Next : Bob Off : AJOUR
  44.    Ink 39 : Bar 334-DC,0 To 634-DC,290 : If PTS<APTS Then DESTROYTOUT
  45.    FAITTOTAL : F=Free
  46. Wend 
  47. RETOUR
  48. '''''''''''''''''''''''          Questions de SONS 
  49. Procedure SAME
  50.    BQSON1: Data 3,"BruitsA","Oiseau","klaxon"
  51.    BQSON2: Data 3,"varisol","rires","diversols"
  52.    BQSON3: Data 4,"dogs","percu","bebes","vents"
  53.    NS=1 : TIRE[0] : BANQSONS : NI=Param
  54.    For N=1 To NB
  55.       TIRE[NI] : GAM$(N)=F$(Param)
  56.       SON(N,0,0)=NS : Rem nombre de sons 
  57.       SON(N,0,1)=0 : Rem m∩┐╜lodie
  58.       For S=1 To NS
  59.          SON(N,S,0)=100 : Rem son brut 
  60.          SON(N,S,1)=20000 : Rem fr∩┐╜quence du son 
  61.          If DIFF<3 Then SON(N,S,1)=15000+Rnd(10000)
  62.          SON(N,S,2)=50 : Rem dur∩┐╜e
  63.          SON(N,S,3)=63 : Rem intensit∩┐╜
  64.       Next 
  65.    Next 
  66.    Z(0)=1+Rnd(NB-2) : GAM$(NB+1)=GAM$(Z(0))
  67.    For S=0 To NS : For T=0 To 3 : SON(NB+1,S,T)=SON(Z(0),S,T) : Next : Next 
  68.    QUESTDESON["same"]
  69. End Proc
  70. Procedure NOREP
  71.    NS=1 : TIRE[0] : TIRB[0] : BANQSONS : NI=Param
  72.    ' Tire l'isol∩┐╜ 
  73.    TIRE[NI] : S$=F$(Param) : TIRB[NB] : Z(0)=Param : GAM$(Z(0))=S$
  74.    ' Tire un couple ou un trio
  75.    TIRE[NI] : S$=F$(Param)
  76.    For X=1 To 2-(NB=2*(NB/2)) : TIRB[NB] : GAM$(Param)=S$ : Next 
  77.    ' comble le reste
  78.    If NB>4
  79.       TIRE[NI] : S$=F$(Param) : For X=1 To 2 : TIRB[NB] : GAM$(Param)=S$ : Next 
  80.    End If 
  81.    For N=1 To NB
  82.       SON(N,0,0)=NS
  83.       SON(N,0,1)=0 : Rem m∩┐╜lodie
  84.       For S=1 To NS
  85.          SON(N,S,0)=100
  86.          SON(N,S,1)=20000
  87.          SON(N,S,2)=50
  88.          SON(N,S,3)=63
  89.       Next 
  90.    Next 
  91.    GAM$(NB+1)="" : Rem ne jouera pas du juke
  92.    QUESTDESON["NotRepeated"]
  93. End Proc
  94. Procedure ISTRUMENT
  95.    NS=2 : TIRE[0] : TIRB[0] : INS$="varisol/sol" : NI=10
  96.    ' Tire l'isol∩┐╜ 
  97.    TIRE[NI] : S$=INS$+Str$(Param)-" "
  98.    TIRB[NB] : Z(0)=Param : GAM$(Z(0))=S$
  99.    ' Tire un couple ou un trio
  100.    TIRE[NI] : S$=INS$+Str$(Param)-" "
  101.    For X=1 To 2-(NB=2*(NB/2)) : TIRB[NB] : GAM$(Param)=S$ : Next 
  102.    ' comble le reste
  103.    If NB>4
  104.       TIRE[NI] : S$=INS$+Str$(Param)-" "
  105.       For X=1 To 2 : TIRB[NB] : GAM$(Param)=S$ : Next 
  106.    End If 
  107.    For N=1 To NB
  108.       SON(N,0,0)=NS
  109.       SON(N,0,1)=0 : Rem m∩┐╜lodie
  110.       For S=1 To NS
  111.          SON(N,S,0)=100
  112.          DIATON : SON(N,S,1)=Param
  113.          SON(N,S,2)=25
  114.          SON(N,S,3)=63
  115.       Next 
  116.    Next 
  117.    GAM$(NB+1)="" : QUESTDESON["Instrument"]
  118. End Proc
  119. Procedure INQLU
  120.    NS=1 : TIRE[0] : INS$="varisol/sol" : NI=10
  121.    TIRE[NI] : I$=INS$+Str$(Param)-" "
  122.    For N=1 To 2*NB
  123.       GAM$(N)=I$
  124.       SON(N,0,0)=NS
  125.       SON(N,0,1)=0 : Rem m∩┐╜lodie
  126.       For S=1 To NS
  127.          SON(N,S,0)=100
  128.          DIATON : SON(N,S,1)=Param
  129.          SON(N,S,2)=50
  130.          SON(N,S,3)=63
  131.       Next 
  132.    Next 
  133.    Z(0)=1+Rnd(NB-2) : K=1+Rnd(NB-1)
  134.    For S=0 To NS : For T=0 To 3 : SON(NB+K,S,T)=SON(Z(0),S,T) : Next : Next 
  135.    GAM$(NB+K)=GAM$(Z(0))
  136.    SON(NB+1,0,1)=2
  137.    QUESTDESON["Included"]
  138. End Proc
  139. Procedure NONINC
  140.    NS=1 : TIRE[0] : INS$="varisol/sol" : NI=13
  141.    For N=1 To 2*NB
  142.       TIRE[NI] : GAM$(N)=INS$+Str$(Param)-" "
  143.       SON(N,0,0)=NS
  144.       SON(N,0,1)=0 : Rem m∩┐╜lodie
  145.       For S=1 To NS
  146.          SON(N,S,0)=100
  147.          SON(N,S,1)=20000
  148.          If DIFF<3 Then DIATON : SON(N,S,1)=Param
  149.          SON(N,S,2)=50
  150.          SON(N,S,3)=63
  151.       Next 
  152.    Next 
  153.    TIRE[0] : TIRE[NB] : Z(0)=Param : R=NB+1+Rnd(NB-2)
  154.    For N=NB+1 To 2*NB
  155.       If N<>R
  156.          TIRE[NB] : K=Param
  157.          For S=0 To NS : For T=0 To 3 : SON(N,S,T)=SON(K,S,T) : Next : Next 
  158.          GAM$(N)=GAM$(K)
  159.       End If 
  160.    Next 
  161.    SON(NB+1,0,1)=2 : QUESTDESON["NotIncluded"]
  162. End Proc
  163. Procedure RVERS
  164.    NS=Min(6,DIFF+2) : SMP=3
  165.    'Load "MRsons/"+"bebe1.sbk",8  
  166.    'Sam Bank 8
  167.    For N=1 To NB : SON(N,0,0)=NS : SON(N,0,1)=0
  168.       Do 
  169.          For S=1 To NS
  170.             Do : Rem La hauteur est <> des pr∩┐╜c∩┐╜dentes  
  171.                SON(N,S,1)=38+Rnd(12) : Exit If S=1
  172.                For T=1 To S-1 : Exit If SON(N,S,1)<>SON(N,T,1),2 : Next 
  173.             Loop 
  174.          Next 
  175.          Exit If N=1
  176.          For T=1 To N-1 : Rem L'objet est <> 
  177.             For S=1 To NS : Exit If SON(T,S,1)<>SON(N,S,1),3 : Next 
  178.          Next 
  179.       Loop 
  180.       For S=1 To NS : Rem SON(N,S,0)=1+Rnd(SMP-1)
  181.          SON(N,S,2)=10+10*Rnd(1)
  182.       SON(N,S,3)=40+Rnd(23) : Next 
  183.    Next 
  184.    Z(0)=1+Rnd(NB-2) : GAM$(NB+1)="&"
  185.    For S=0 To NS : For T=0 To 3 : SON(NB+1,S,T)=SON(Z(0),S,T) : Next : Next 
  186.    For S=1 To NS/2
  187.       Swap SON(NB+1,S,1),SON(NB+1,NS-S+1,1)
  188.       Swap SON(NB+1,S,2),SON(NB+1,NS-S+1,2)
  189.    Next 
  190.    QUESTDESON["Reverse"]
  191. End Proc
  192. Procedure CONT
  193.    FERME7=True
  194.    NS=1 : TIRE[0] : INS$="varisol/sol" : NI=10
  195.    For N=1 To NB+1
  196.       TIRE[NI] : GAM$(N)=INS$+Str$(Param)-" "
  197.       SON(N,0,0)=NS
  198.       SON(N,0,1)=0 : Rem m∩┐╜lodie
  199.       For S=1 To NS
  200.          SON(N,S,0)=100
  201.          SON(N,S,1)=20000
  202.          If DIFF<3 Then DIATON : SON(N,S,1)=Param
  203.          SON(N,S,2)=50
  204.          SON(N,S,3)=63
  205.       Next 
  206.    Next 
  207.    Z(0)=1+Rnd(NB-2) : GAM$(NB+2)=GAM$(Z(0))
  208.    For S=0 To NS : For T=0 To 3 : SON(NB+2,S,T)=SON(Z(0),S,T) : Next : Next 
  209.    SON(NB+1,0,1)=3 : SON(0,0,1)=1 : QUESTDESON["Contained"]
  210. End Proc
  211. Procedure NOCONT
  212.    'Load "MRsons/"+"samples.abk",8 : SMP=3 : Sam Bank 8 
  213.    TIRE[0] : TIRE[12] : S0=Param+38 : Z(0)=1+Rnd(NB-1)
  214.    For N=1 To NB : SON(N,0,0)=2 : SON(N,0,1)=1 : SON(N,1,0)=0
  215.       If N=Z(0)
  216.          SON(N,1,1)=S0
  217.       Else 
  218.          TIRE[12] : SON(N,1,1)=Param+38
  219.       End If 
  220.       SON(N,1,2)=50 : SON(N,1,3)=63
  221.       TIRE[12] : SON(N,2,0)=0 : SON(N,2,1)=Param+38 : SON(N,2,2)=50
  222.    Next 
  223.    SON(NB+1,0,0)=1 : SON(NB+1,1,0)=0
  224.    SON(NB+1,1,1)=S0 : SON(NB+1,1,2)=50 : SON(NB+1,1,3)=63
  225.    GAM$(NB+1)="&" : QUESTDESON["NotContain"]
  226. End Proc
  227. '  
  228. '
  229. Procedure BANQSONS
  230.    Data 16,"BruitsA/B",17,"Oiseau/O",19,"Klaxon/K",10,"AnimoNb/A",30
  231.    Data "bebesnew/",10,"eauxnew/",11,"exploznew/",11,"moteleknew/",10
  232.    Data "percu/",9,"dogs/d",8,"insekt/",11,"cloches/",12
  233.    Data "ClochesVar/",10,"MaxRires/",18,"diversols/",10,"motexplo/",10
  234.    Restore : Read N : N=1+Rnd(N-1) : For X=1 To N : Read B$,NI : Next 
  235.    For X=1 To NI : F$(X)=B$+Str$(X)-" " : Next 
  236. End Proc[NI]
  237. Procedure DIATON
  238.    Data 196,207.65,220,233.08,246.94
  239.    Data 261.63,277.18,293.66,311.13,329.63,349.23,370,392,415.3
  240.    Data 440,466.16,493.88,523.25
  241.    N=1+Rnd(16) : Restore : For X=1 To N : Read F : Next : F=20000/392*F
  242. End Proc[F]
  243. Procedure QUESTDESON[Q$]
  244.    MS6: Data 430,20,1,0,490,20,2,0,380,60,1,1,540,60,2,1,370,115,1,2,550,115,2,2
  245.    MS5: Data 460,20,2,0,385,50,1,1,535,50,2,1,370,115,1,2,550,115,2,2
  246.    MS4: Data 430,20,1,0,490,20,2,0,380,60,1,1,540,60,2,1
  247.    MS3: Data 460,20,2,0,380,60,1,1,540,60,2,1
  248.    Restore "MS"+Str$(NB)-" "
  249.    PARLE[Q$,1] : Wait 50
  250.    For N=1 To NB : Read H(N),V(N),CX,CY : Add H(N),(-DC-15)
  251.       CUR(CX,CY,0)=H(N) : CUR(CX,CY,1)=V(N) : CUR(CX,CY,2)=BZN+N
  252.       HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  253.       MZ=BZN+N
  254.    Next 
  255.    If GAM$(NB+1)<>"" : Rem Si le juke joue
  256.       CX=2 : Add CY,1 : HCR=Max(CX,HCR) : VCR=Max(CY,VCR)
  257.       CUR(CX,CY,0)=477-DC-15 : CUR(CX,CY,1)=150 : CUR(CX,CY,2)=BZN+NB+1
  258.    End If 
  259.    INICURS[CX,CY]
  260.    If GAM$(NB+1)<>"" Then VIBRE[NB+1] : Wait 50
  261.    For N=1 To NB
  262.       Bob N,H(N),V(N),1 : Wait Vbl : Bob BCUR,H(N),V(N), : Wait Vbl 
  263.       VIBRE[N] : If SON(1,1,0)<100 Then Wait 25
  264.    Next 
  265.    '  
  266.    '
  267.    INICURS[2,1]
  268.    VITESSE=$FFFF : TSAB=Timer+49
  269.    Do : FAIXAMCUR : Exit If Param : JOUESON : Loop 
  270.    If FERME7
  271.       A$="MRbruits/Brt4.sbk" : If Not(Exist(A$)) : A$="df0:Brt4.sbk" : End If 
  272.       Load A$,7 : FERME7=False
  273.    End If 
  274. End Proc
  275. Procedure JOUESON
  276.    N=MZ-BZN
  277.    If N<NB+1 Then Bob N,,,2 : Wait Vbl 
  278.    VIBRE[N]
  279.    If N<NB+1 Then Bob N,,,1 : Wait Vbl 
  280. End Proc
  281. Procedure VIBRE[N]
  282.    On ERR Goto FINDEPROC
  283.    V=%101
  284.    If SON(N,0,1)=0 : Rem melodies 
  285.       If SON(N,1,0)>99
  286.          A$="MRsons/"+GAM$(N) : Open In 1,A$ : L=Lof(1) : Close 1
  287.          If L>64000 : Pop Proc : End If : Bload A$,Start(6)
  288.       End If 
  289.       For S=1 To SON(N,0,0) : Volume V,SON(N,S,3)
  290.          If SON(N,S,0)<100
  291.             If SON(N,S,0)>0
  292.                Sample SON(N,S,0) To V
  293.             Else 
  294.                Wave 1 To V
  295.             End If 
  296.             Play V,SON(N,S,1),SON(N,S,2)
  297.          Else 
  298.             While Timer<DIT : Wend : F=SON(N,S,1)
  299.             Sam Raw V,Start(6)+104,L,F : DIT=Timer+Max(SON(N,S,2),50*L/F)
  300.          End If 
  301.       Next 
  302.    End If 
  303.    If SON(N,0,1)=1 : Rem accords
  304.       If SON(N,1,0)>0
  305.          Sample SON(N,1,0) To V
  306.       Else 
  307.          Wave 1 To %1111
  308.       End If 
  309.       Play %101,SON(N,2,1),0
  310.       Play %1010,SON(N,1,1),SON(N,1,2)
  311.       Play %1111,0,0
  312.    End If 
  313.    If SON(N,0,1)=2 : Rem S∩┐╜quence question (les inclus) 
  314.       For N=NB+1 To 2*NB
  315.          A$="MRsons/"+GAM$(N) : Open In 2,A$ : L=Lof(2) : Close 2
  316.          If L>64000 : Pop Proc : End If 
  317.          Bload A$,Start(6)
  318.          For S=1 To SON(N,0,0)
  319.             Volume V,SON(N,S,3)
  320.             While Timer<DIT : Wend : F=SON(N,S,1)
  321.             Sam Raw V,Start(6)+104,L,F : DIT=Timer+Max(SON(N,S,2),50*L/F)
  322.          Next 
  323.          Wait 40
  324.       Next 
  325.    End If 
  326.    If SON(N,0,1)=3 : Volume V,63 : Rem les superpos∩┐╜s 
  327.       For X=1 To 2
  328.          A$="MRsons/"+GAM$(NB+X)
  329.          Open In 2,A$ : L=Lof(2) : Close 2 : If L>64000 : Pop Proc : End If 
  330.          LS(X)=L : Bload A$,Start(5+X)
  331.       Next 
  332.       While Timer<DIT : Wend 
  333.       LAVOIX: Data %1,%100
  334.       Restore LAVOIX
  335.       For X=1 To 2
  336.          F=SON(NB+X,1,1) : Read VS : Volume VS,63
  337.          Sam Raw VS,Start(5+X)+104,LS(X),F
  338.       Next : Wait 20
  339.       L=Max(LS(1),LS(2)) : DIT=Timer+Max(SON(NB+X,1,2),50*L/F)
  340.    End If 
  341.    While Timer<DIT : Wend : Play %1111,0,0
  342.    Wait 10
  343.    FINDEPROC:
  344. End Proc
  345. Procedure FAIXAMCUR
  346.    ' OPTION  true fin de test 
  347.    TREN=Timer+VITESSE : OPTION=True
  348.    Do 
  349.       CURSEUR[1] : Exit If PTS<1
  350.       If BOUTONB Then MZ=1
  351.       If MZ=1 Then CLIQUE[13] : PTS=0 : Exit : Rem Puis destroytout 
  352.       If MZ=2 : CLIQUE[14] : PARLE[DERANN$,1] : INICURS[CX,CY]
  353.       BOUTONS=False : End If 
  354.       If MZ=3 Then CLIQUE[15] : PTS=0 : ABANDON=True : Exit 
  355.       Exit If PTS<1 or DUREE<1
  356.       If BOUTONS
  357.          JOUESON
  358.          If MZ=BZN+Z(0) : BRUITB[1] : While Timer<DIT7 : Wend : Exit 
  359.          Else 
  360.             TSAB0=TSAB-Timer
  361.             Dec PTS : METPOINTS : DESTROYPT : Exit If PTS<1
  362.             If DIFF>1 : Dec PTS : METPOINTS : DESTROYPT : Exit If PTS<1 : End If 
  363.             If DIFF>3 : Dec PTS : METPOINTS : DESTROYPT : Exit If PTS<1 : End If 
  364.             TSAB=TSAB0+Timer : While Mouse Key : Wend 
  365.          End If 
  366.       End If 
  367.    Loop 
  368. End Proc[OPTION]
  369. Procedure ALEAMUS[S]
  370.    If S=0 Then FAITMUSE=0 : Volume 15,0 : Pop Proc
  371.    FAITMUSE=1 : Add DIT,150
  372. End Proc
  373. Procedure MUSE
  374.    If PREF(5)=1 Then Pop Proc
  375.    If FAITMUSE=0 Then Pop Proc
  376.    Data 261.63,277.18,293.66,311.13,329.63,349.23,370,392,415.3
  377.    Data 440,466.16,493.88,523.25
  378.    N=1+Rnd(11) : Restore : For X=1 To N : Read F : Next : F=20000/392*F
  379.    A$="mrsons/voliere/O"+Str$(1+Rnd(19))-" "
  380.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  381.    Open In 1,A$ : L=Lof(1) : Close 1 : Bload A$,Start(6)
  382.    VOIX=Rnd(1)+4*Rnd(1) : PEDALE=20+Rnd(43)
  383.    Volume VOIX,PEDALE : Sam Raw VOIX,Start(6)+104,L,F
  384.    DIT=Timer+50*L/F+Rnd(100)
  385. End Proc
  386. '
  387. '
  388. '                          PROCEDURES GENERALES  
  389. '
  390. Procedure INITEST
  391.    DC=0 : Rem nouvelles coordonn∩┐╜es / petit ∩┐╜cran
  392.    If Screen=7 : PRENDVAR
  393.    Else Load Iff "decors/"+Mid$(TEST$,1,2),0 : Double Buffer 
  394.    LANGUE$="Ang" : PREF(1)=1 : PREF(3)=2 : End If 
  395.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  396.    Hide On : Limit Mouse : MXETAPE=40 : CYCLETAPE=8 : GAUCHE=True : Curs Off 
  397.    XB(0)=280 : YB(0)=46 : Rem Suite
  398.    XB(1)=295 : YB(1)=63 : Rem Help 
  399.    XB(2)=278 : YB(2)=79 : Rem Encore 
  400.    BCUR=63 : Rem N∩┐╜ de bob du curseur 
  401.    XP=282 : YP=4 : APTS=0 : BBOULE=15 : Rem bob des points sur le boulier
  402.    XC=253 : YC=177 : Rem compteur d'∩┐╜tapes
  403.    XT=209 : YT=24 : Rem compteur du total
  404.    BOULBK=1 : CRSBK=2 : FLCHBK=3 : CERVBK=4 : BASEBLOCK=4 : Rem Blocks de base 
  405.    BZN=8
  406.    For X=1 To 15 : Erase X : Next 
  407.    Erase 7 : Reserve As Chip Work 7,7520 : Load "MRbruits/Brt0.sbk",7
  408.    '
  409.    BANQBI["",""]
  410.    '
  411.    Reserve Zone 35 : Limit Mouse 
  412.    ETAPE=0 : QST=ETAPE : DIFF=1 : ELTEMPS=100
  413.    '
  414.    ' Boulier des points par ∩┐╜cran    (Block BOULBK pour toutes les boules)    
  415.    Get Block BOULBK,25+XP-DC,5+YP,10,10,1
  416.    '
  417.    ' Compteur d'∩┐╜tapes     (Block CRSBK pour le curseur, initialis∩┐╜ ici)  
  418.    HCURS=XC-DC : VCURS=YC-3*ETAPE : Get Block CRSBK,HCURS,VCURS,22,17,1
  419.    Paste Icon HCURS,VCURS,12
  420.    '
  421.    ' Fl∩┐╜ches  (block FLCHBK, actualis∩┐╜ chaque fois) 
  422.    'For I=0 To 2 : Set Zone I+1,XB(I)+7-DC,YB(I)+7 To XB(I)+19-DC,YB(I)+19
  423.    'Next  
  424.    '
  425.    ' Difficult∩┐╜ (Block CERVBK actualis∩┐╜ chaque fois, initialis∩┐╜ ici)
  426.    AZDIF: Data 284,172,311,183
  427.    Data 285,161,314,172
  428.    Data 284,149,317,161
  429.    Data 285,133,321,149
  430.    Data 285,113,326,133
  431.    Restore AZDIF : Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
  432.    Get Block CERVBK,H,V,H1-H,V1-V,1 : DIFF[0,DIFF]
  433.    Restore AZDIF
  434.    'For Y=4 To 8 : Read H,V,H1,V1 : Set Zone Y,H,V To H1,V1 : Next  
  435.    '
  436.    ' Plage de travail (Block 1, de type "c")
  437.    'Get Cblock 1,334,0,300,290
  438.    Get Cblock 1,0,0,8,2
  439.    TEMPS[0] : PARLE["Start",2]
  440. End Proc
  441. Procedure PAUSEPOINTS
  442.    BZDIF: Data 284,172,311,183,285,161,314,172,284,149,317,161
  443.    Data 285,133,321,149,285,113,326,133
  444.    ALEAMUS[1] : A=0 : CX=1 : CY=0
  445.    If(PREF(4)=0) or(ETAPE<1)
  446.       Repeat 
  447.          VIDCUR[0]
  448.          For I=0 To 2
  449.             CUR(1,I,0)=XB(I)-DC : CUR(1,I,1)=YB(I) : CUR(1,I,2)=I+1
  450.          Next 
  451.          Restore BZDIF : For Y=4 To 8
  452.             Read H,V,H1,V1 : Add H,-DC : Add H1,-DC
  453.          CUR(1,11-Y,0)=H : CUR(1,11-Y,1)=V : CUR(1,Y-1,2)=12-Y : Next 
  454.          CUR(0,2,0)=194-DC : CUR(0,2,1)=85 : CUR(0,2,2)=9
  455.          INICURS[CX,CY] : HCR=1 : VCR=7
  456.          CURSEUR[0] : A=Param : If BOUTONB : MZ=3 : End If 
  457.          If(A=27) or(MZ=2) : Rem pr∩┐╜sentations
  458.             ALEAMUS[0]
  459.             If MZ=2 : CLIQUE[14] : CX=1 : CY=1 : INICURS[CX,CY] : End If 
  460.             DEPLACE: Data 1,0,1,1,1,2,0,2,1,2,1,1,1,0,1,1,1,2,1,3
  461.             Bob BCUR,CUR(1,0,0),CUR(1,0,1), : Wait Vbl : PARLE["Arrows",2]
  462.             Restore DEPLACE : For X=1 To 10
  463.                Read H,V
  464.                BRUITB[3] : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl 
  465.                TEMPS=Timer+50
  466.                Repeat : K1=Mouse Key : Until Timer>TEMPS or K1>0
  467.                Exit If K1
  468.             Next 
  469.             If K1<1
  470.                PRESENTE: Data 1,0,"Advance",1,1,"Help",1,2,"Main"
  471.                Data 0,2,"Preferences"
  472.                Wait 50 : PARLE["select",2] : Wait 250 : Restore PRESENTE
  473.                For X=1 To 4
  474.                   Read H,V,A$ : Bob BCUR,CUR(H,V,0),CUR(H,V,1), : Wait Vbl 
  475.                   PARLE[A$,2]
  476.                   T=Timer+250 : Repeat : K2=Mouse Key : Until Timer>T or K2>0
  477.                   Exit If K2
  478.                Next 
  479.                If K2<1
  480.                   PARLE["Level",2] : Rem Amal Off 15 : Wait Vbl 
  481.                   For X=1 To 5 : Bob BCUR,CUR(1,8-X,0),CUR(1,8-X,1), : Wait Vbl 
  482.                      T=Timer+50
  483.                      Repeat : K3=Mouse Key : Until Timer>T or K3>0
  484.                      Exit If K3
  485.                      Bob BCUR,,,NBK+16 : Wait Vbl : Rem AJOUR : DIFF[X]
  486.                      'Bob BCUR,,,NBK+17 : Wait Vbl : Wait 40
  487.                   Next 
  488.                   If K3<1
  489.                      T=Timer+100
  490.                      Repeat : K=Mouse Key : Until Timer>T or K>0
  491.                   End If 
  492.                End If 
  493.                'DIFF[1] 
  494.             End If 
  495.             MZ=0 : INICURS[1,0] : ALEAMUS[1] : Wait 50
  496.          End If 
  497.          If A=43
  498.             ETAPE=Min(39,ETAPE+1) : ETAPE[ETAPE] : Inc QST : MZ=0
  499.          End If 
  500.          If A=45
  501.             ETAPE=Max(0,ETAPE-1) : ETAPE[ETAPE] : QST=Max(0,QST-1) : MZ=0
  502.          End If 
  503.          If 3<MZ and MZ<9
  504.             BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : AJOUR : DIFF[DIFF,MZ-3]
  505.          End If 
  506.          If MZ=9 : ALEAMUS[0] : BRUITB[50]
  507.             P=1 : If Screen=3 : P=2 : End If : PREFERENCES[P] : ALEAMUS[1]
  508.             MZ=0
  509.             If DC<1 : BANQBI["A.wurlyp",""] : EQUALISE : End If 
  510.          End If 
  511.       Until(MZ=1) or(MZ=3) or BOUTONB
  512.    Else 
  513.       MZ=1
  514.    End If : ALEAMUS[0]
  515.    Wait 1+50*PREF(4) : Rem If(PREF(4)=1) and(ETAPE>0) Then MZ=1 
  516.    If MZ=1
  517.       ALEAMUS[0] : DIT=0
  518.       CLIQUE[13] : Inc ETAPE : Inc QST
  519.       If QST>CYCLETAPE
  520.          A=DIFF : QST=1 : DIFF=Min(DIFF+1,5) : DIFF[A,DIFF]
  521.       End If 
  522.       ETAPE[ETAPE] : TEMPS[0]
  523.    End If 
  524.    If(MZ=3) or BOUTONB Then CLIQUE[15]
  525.    Amal Off 15 : Bob Off BCUR : Bob Clear : AJOUR
  526. End Proc[MZ]
  527. Procedure INICURS[CX,CY]
  528.    Limit Mouse 
  529.    If Chanan(15) Then Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1), : Pop Proc
  530.    Channel 15 To Bob BCUR : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),NBK+17
  531.    Wait Vbl : Amal 15,"A 0,(R1,46)(R2,4)"
  532.    Amreg(15,1)=NBK+17 : Amreg(15,2)=NBK+18 : Amal On 15 : Clear Key 
  533. End Proc
  534. Procedure CURSEUR[C]
  535.    BOUTONA=False : BOUTONB=False : BOUTONS=False
  536.    Clear Key 
  537.    Repeat 
  538.       Repeat : T1=Timer+50
  539.          For X=1 To 10
  540.             X=X Mouse : Y=Y Mouse : Wait 3 : U=X Mouse : V=Y Mouse
  541.             Exit If X=U and Y=V
  542.          Next 
  543.          X Mouse=150 : Y Mouse=100 : MX0=X Mouse : MY0=Y Mouse : DM=0
  544.          Repeat 
  545.             If Timer>DIT Then MUSE
  546.             If C=1 : Rem En cours de question 
  547.                If Timer>TSAB : TEMPS[1] : TSAB=Timer+49 : End If 
  548.                If(PTS<1) or(DUREE<1) : MZ=0 : Exit 3 : End If 
  549.                If Timer>TREN : A=0 : Exit 3 : End If 
  550.             End If 
  551.             If C=2 : Rem En menu principal
  552.                If Timer>T1
  553.                   Restore "ETOILE"
  554.                   For X=1 To 1+Rnd(21) : Read A,B : Next 
  555.                   Bob 3,A,B, : Wait Vbl 
  556.                   T2=Timer+10+Rnd(20) : T1=T2+200
  557.                End If 
  558.                If Timer>T2
  559.                   Bob 3,-20,, : T1=Timer+50+50*Rnd(2) : T2=T1+200
  560.                End If 
  561.             End If 
  562.             MX=X Mouse : MY=Y Mouse : A$=Inkey$
  563.          Until A$<>"" or Mouse Key or Abs(MX0-MX)>DM or Abs(MY0-MY)>DM
  564.          K=Mouse Key : R=Asc(A$)
  565.          A=-28*(MX-MX0>DM)-29*(MX0-MX>DM)-30*(MY0-MY>DM)-31*(MY-MY0>DM)
  566.          If(R>27) and(R<32) Then A=R
  567.          X=CX : Y=CY
  568.          If(A=28) Then Add X,1
  569.          If(A=29) Then Add X,-1
  570.          If(A=30) Then Add Y,-1
  571.          If(A=31) Then Add Y,1
  572.       Until((X<0)+(Y<0)+(X>HCR)+(Y>VCR)=0)
  573.       If(X<>CX) or(Y<>CY)
  574.          If(CUR(X,Y,0)=0) and(CUR(X,Y,1)=0)
  575.             If(A=28) or(A=29)
  576.                Repeat : Add Y,-1,0 To VCR
  577.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  578.             End If 
  579.             If(A=30) or(A=31)
  580.                Repeat : Add X,1,0 To HCR
  581.                Until((CUR(X,Y,0)<>0) or(CUR(X,Y,1)<>0))
  582.             End If 
  583.          End If 
  584.          BRUITB[3] : CX=X : CY=Y : Bob BCUR,CUR(CX,CY,0),CUR(CX,CY,1),
  585.          Exit If C=2
  586.       End If 
  587.    Until(K>0)+(R=43)+(R=45)+(R=27)+(R=13)
  588.    MZ=CUR(CX,CY,2)
  589.    BOUTONS=(K>0)+(R=13) : BOUTONA=(K=1)+(K=3)+(R=13) : BOUTONB=(K>1)
  590. End Proc[R]
  591. Procedure VIDCUR[A]
  592.    For X=0 To 12 : For Y=0 To 9 : For Z=0 To 2 : CUR(X,Y,Z)=0
  593.    Next : Next : Next 
  594.    If A=1 : Rem situe les trois fl∩┐╜ches
  595.       For I=0 To 2 : CUR(0,I,0)=XB(I)-DC : CUR(0,I,1)=YB(I)
  596.       CUR(0,I,2)=I+1 : Next 
  597.       HCR=1 : VCR=2
  598.    End If 
  599. End Proc
  600. Procedure PARLE[A$,T]
  601.    If Length(6)<1 Then Erase 6 : Reserve As Chip Work 6,$FFFF
  602.    If PREF(1)<1 Then Pop Proc
  603.    While Timer<DIT : Wend 
  604.    Volume %101,63 : DERANN$=A$
  605.    T$=TEST$ : If T=2 Then T$="General"
  606.    SEX$=Mid$("FM",1+Rnd(1),1) : If Instr("JapIta",LANGUE$) Then SEX$="F"
  607.    F$="Paroles/"+T$+"/"+LANGUE$+SEX$+"/"+A$
  608.    If Not Exist(F$) Then Pop Proc
  609.    Open In 1,F$ : L=Lof(1) : Close 1
  610.    If L>$FFFF Then Pop Proc
  611.    S6=Start(6) : Bload F$,S6 : Volume %101,63 : Sam Raw %101,104+S6,L,20000
  612.    DIT=Timer+(L/400)+20
  613.    If Exist(F$+Chr$(50))
  614.       While Timer<DIT : Wend : F$=F$+Chr$(50)
  615.       Open In 1,F$ : L=Lof(1) : Close 1
  616.       If L>64000 : Pop Proc : End If 
  617.       Bload F$,S6 : Sam Raw %101,104+S6,L,20000
  618.       DIT=Timer+(L/400)+20
  619.    End If 
  620.    If T=1 Then While Timer<DIT : Wend 
  621. End Proc
  622. Procedure BRUIT[F,V,A$]
  623.    If Length(6)<1 Then Reserve As Chip Work 6,$FFFF
  624.    If PREF(2) Then Pop Proc
  625.    While Timer<DIT : Wend 
  626.    S=20000 : If F<>0 Then S=1000*F
  627.    If L>65430 Then Pop Proc
  628.    Open In 1,"MRbruits/"+A$ : L=Lof(1) : Close 1
  629.    Bload "MRbruits/"+A$,Start(6)
  630.    Volume %1010,63 : If V<>0 Then Volume %1010,V
  631.    Sam Raw %1010,Start(6)+104,L,S : DIT=Timer+L/400
  632. End Proc
  633. Procedure BRUITB[N]
  634.    If FERME7 Then Pop Proc
  635.    F=20000 : If N=100 Then N=3 : F=30000
  636.    If N=50 Then N=3 : F=10000
  637.    S0=Start(7) : S=Leek(S0+8*N) : L=Leek(S0+8*N+4)
  638.    Volume %1010,63 : Sam Raw %1010,S+S0+105,L-105,F : DIT7=Timer+L/400
  639. End Proc
  640. Procedure TEMPS[T]
  641.    ' Mettre sur la voix 
  642. If T=0 : TEMPS=DIFF-1 : Else BRUITB[2] : End If 
  643.    Inc TEMPS
  644.    If TEMPS>10
  645.       Dec PTS : METPOINTS : DESTROYPT : Dec DUREE
  646.       If DUREE<1 or PTS<1 : Pop Proc : End If 
  647.       TEMPS=DIFF
  648.    End If 
  649.    Paste Icon 578-DC,5,TEMPS+15 : Wait Vbl 
  650. End Proc
  651. Procedure CLIQUE[I]
  652.    Amal Off 1 : Bob Off BCUR : Bob Clear : AJOUR
  653.    BRUITB[50] : H=XB(I-13)-DC : V=YB(I-13)
  654.    Get Block FLCHBK,H,V,40,40,1 : Paste Icon H,V,I : While Mouse Key : Wend 
  655.    ABLOC[FLCHBK]
  656. End Proc
  657. Procedure AIDE
  658. End Proc
  659. Procedure ETAPE[ETAPE]
  660.    Update : Update Off : Wait Vbl 
  661.    Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl 
  662.    Bob Clear : Put Block CRSBK,XC-DC, : Bob Draw : Screen Swap : Wait Vbl 
  663.    Update On 
  664.    HCURS=XC-DC : VCURS=YC-3*ETAPE
  665.    Get Block CRSBK,HCURS,VCURS,22,17,1 : Paste Icon HCURS,VCURS,12
  666. End Proc
  667. Procedure DIFF[I1,I2]
  668.    ZD1: Data 284,172,311,183
  669.    ZD2: Data 285,161,314,172
  670.    ZD3: Data 284,149,317,161
  671.    ZD4: Data 285,133,321,149
  672.    ZD5: Data 285,113,326,133
  673.    If I1>0
  674.       Restore "ZD"+Str$(I1)-" " : Read H : Add H,-DC
  675.       Update : Update Off : Wait Vbl 
  676.       Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl 
  677.       Bob Clear : Put Block CERVBK,H, : Bob Draw : Screen Swap : Wait Vbl 
  678.       Update On 
  679.    End If 
  680.    I=Min(I2,5) : Restore "ZD"+Str$(I)-" " : Read H,V,H1,V1
  681.    Add H,-DC : Add H1,-DC
  682.    Get Block CERVBK,H,V,H1-H,V1-V,1 : Paste Icon H,V,6+I
  683.    DIFF=I
  684. End Proc
  685. Procedure FAITTOTAL
  686.    I=PTS : B=BBOULE
  687.    PT1: Data 25,5
  688.    PT2: Data 14,5
  689.    PT3: Data 3,5
  690.    PT4: Data 25,16
  691.    PT5: Data 14,16
  692.    PT6: Data 3,16
  693.    PT7: Data 25,27
  694.    PT8: Data 14,27
  695.    PT9: Data 3,27
  696.    If PTS>0
  697.       Amal Off : Bob Off : AJOUR
  698.       A$="A 1,(R2,7)(R3,1)(R4,1);M R0,0,5;M 0,R1,3;M -4,0,4"
  699.       For X=I To 1 Step -1
  700.          Dec PTS : METPOINTS : Inc TPTS(TEST)
  701.          Restore "PT"+Str$(PTS+1)-" " : Read H,V : H=XP+H-DC : V=YP+V
  702.          Dec B : Channel B To Bob B : Bob B,H,V,NBK+1 : Wait Vbl 
  703.          Amal B,A$
  704.          Amreg(B,0)=XT+55-H-DC : Amreg(B,1)=YT+4-V : Amreg(B,2)=NBK+1
  705.          Amreg(B,3)=NBK+15 : Amreg(B,4)=NBK+16
  706.          Amal On B
  707.          If X=I : Sam Loop On : BRUIT[0,0,"Bobloc"] : End If 
  708.          METTOTAL["+",TPTS(TEST),XT,YT] : Wait Vbl 
  709.       Next 
  710.       While Chanmv(B) : Wend 
  711.       Bob Off : Bob Clear : Sam Loop Off 
  712.    End If 
  713. End Proc
  714. Procedure METTOTAL[D$,N,X0,Y0]
  715.    If D$="+" or N>0
  716.       U=N mod 10 : N=(N-U)/10
  717.       If N>0
  718.          D=N mod 10 : N=(N-D)/10
  719.          If N>0
  720.             C=N mod 10
  721.          End If 
  722.       End If 
  723.       Paste Icon X0-DC,Y0,27+C : Wait Vbl 
  724.       Paste Icon X0+13-DC,Y0,27+D : Wait Vbl 
  725.       Paste Icon X0+26-DC,Y0,27+U : Wait Vbl 
  726.    Else 
  727.       Paste Icon X0,Y0,26
  728.       Paste Icon X0+13,Y0,26
  729.       Paste Icon X0+26,Y0,26 : Paste Icon X0+26,Y0,26
  730.    End If 
  731. End Proc
  732. Procedure METPOINTS
  733.    APT1: Data 25,5
  734.    APT2: Data 14,5
  735.    APT3: Data 3,5
  736.    APT4: Data 25,16
  737.    APT5: Data 14,16
  738.    APT6: Data 3,16
  739.    APT7: Data 25,27
  740.    APT8: Data 14,27
  741.    APT9: Data 3,27
  742.    If PTS<0 Then APTS=0 : Pop Proc
  743.    If PTS>APTS
  744.       For X=Max(1,APTS+1) To PTS
  745.          Restore "APT"+Str$(X)-" " : Read H,V : Paste Icon XP+H-DC,YP+V,1
  746.       Next 
  747.    Else 
  748.       For X=APTS To Max(PTS+1,1) Step -1
  749.          Restore "APT"+Str$(X)-" "
  750.          Read H,V : H=XP+H-DC : V=YP+V : AUTOBLOC[BOULBK,H,V]
  751.       Next 
  752.    End If 
  753.    APTS=PTS
  754. End Proc
  755. Procedure DESTROYPT
  756.    If PTS<0 Then Pop Proc
  757.    While FERMEDES : Wend : FERMEDES=True
  758.    BPT1: Data 25,5
  759.    BPT2: Data 14,5
  760.    BPT3: Data 3,5
  761.    BPT4: Data 25,16
  762.    BPT5: Data 14,16
  763.    BPT6: Data 3,16
  764.    BPT7: Data 25,27
  765.    BPT8: Data 14,27
  766.    BPT9: Data 3,27
  767.    BRUITB[4] : Restore "BPT"+Str$(PTS+1)-" " : Read H,V
  768.    B=BBOULE-1 : Dec BBOULE : If BBOULE=12 Then BBOULE=15
  769.    BL=B+20
  770.    DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R2,1)"
  771.    DSP$=DSP$+";M 0,100,62"
  772.    Channel B To Bob BL : Bob BL,XP+H-DC,YP+V,NBK+3 : Wait Vbl : Amal B,DSP$
  773.    Amreg(B,0)=10 : Amreg(B,1)=NBK+3 : Amreg(B,2)=NBK+16 : Amal On B
  774.    FERMEDES=False
  775.    'While Chanmv(B) or Chanan(B) : Wend 
  776. End Proc
  777. Procedure DESTROYTOUT
  778.    Data 25,5,14,5,3,5,25,16,14,16,3,16,25,27,14,27,3,27
  779.    If APTS<1 Then Pop Proc
  780.    BRUIT[0,0,"perdu!"] : Bob Off : Bob Clear : Amal Off 
  781.    Restore : For P=1 To APTS : Read H,V
  782.    H(P)=XP+H-DC : V(P)=YP+V : AUTOBLOC[BOULBK,H(P),V(P)] : Next 
  783.    For P=1 To APTS : Bob P,H(P),V(P),NBK+3 : Wait Vbl : Next 
  784.    DSP$="A 1,(R1,R0)(R1+1,R0)(R1+2,R0)(R1+3,R0)(R1+4,R0)(R1+5,R0)(R1+13,1)"
  785.    DSP$=DSP$+";M 0,100,62"
  786.    For P=APTS To 1 Step -1
  787.       Channel P To Bob P : Bob P,H(P),V(P), : Wait Vbl 
  788.       Amal P,DSP$ : Amreg(P,0)=10 : Amreg(P,1)=NBK+3 : Amal On P
  789.    Next 
  790.    While Chanmv(1) or Chanan(1) : Wend : Wait Vbl : Wait 25
  791.    APTS=0 : PTS=0
  792. End Proc
  793. Procedure DROITE[E,D]
  794.    If Not(GAUCHE) Then Pop Proc
  795.    Amal Off : Wait Vbl 
  796.    Channel 1 To Screen Offset E : Screen E : Screen To Front E
  797.    Amal 1,"M 20,0,5;M R0,0,R1;M 20,0,5"
  798.    Amreg(1,0)=D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
  799.    Amal On 1 : While Chanmv(1) : Wend : GAUCHE=False
  800. End Proc
  801. Procedure GAUCHE[E,D]
  802.    If GAUCHE Then Pop Proc
  803.    Amal Off : Wait Vbl 
  804.    Channel 1 To Screen Offset E : Screen E
  805.    Amal 1,"M -20,0,5 ;M R0,0,R1;M -20,0,5"
  806.    Amreg(1,0)=-D : Amreg(1,1)=20 : If D<100 Then Amreg(1,1)=5
  807.    Amal On 1 : While Chanmv(1) : Wend : GAUCHE=True
  808. End Proc
  809. Procedure DIAPHRAGME[A,B]
  810.    ' montre la moiti∩┐╜ gauche de B arrivant en diaphragme sur A
  811.    Autoback 0 : Screen To Front A
  812.    For X=1 To 59 Step 2
  813.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  814.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  815.    Next 
  816.    For X=60 To 130 Step 10
  817.       H0=170-X : H1=170+X : V0=128-X : V1=128+X
  818.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  819.    Next 
  820.    For X=131 To 176 Step 20
  821.       H0=170-X : H1=170+X : V0=0 : V1=260
  822.       Screen Swap : Wait Vbl : Screen Copy B,H0,V0,H1,V1 To A,H0,V0
  823.    Next 
  824.    Screen To Front B : Screen B : Rem Screen Close A 
  825. End Proc
  826. Procedure CLOCK[X,Y]
  827.    Change Mouse 3 : X Mouse=X : Y Mouse=Y : Show On 
  828. End Proc
  829. Procedure PASSECRAN[A$,E,F,G]
  830.    Screen Open 2,360,270,64,Lowres : Flash Off 
  831.    Get Palette E : Screen To Front E
  832.    Screen Copy E,0,0,360,270 To 2,0,0 : Screen Close E
  833.    Load Iff A$,F : Flash Off : Get Palette 2
  834.    Screen To Front 2 : Screen F
  835.    If G=1 Then Screen Close 2 : Double Buffer 
  836. End Proc
  837. Procedure BANQBI[B$,I$]
  838.    CLOCK[280,60] : Amal Off : Bob Off : AJOUR : Erase 1 : Erase 2
  839.    If B$=""
  840.       NBK=0 : Load "BanqueB/BoulesC.abk"
  841.    Else 
  842.       Load "BanqueB/"+B$+".abk" : NBK=Length(1) : Load "BanqueB/BoulesC.abk",1
  843.    End If 
  844.    Load "BanqueI/Ftdb.abk" : NBI=Length(2)
  845.    If I$<>"" Then Load "BanqueI/"+I$+".abk",2
  846.    Make Icon Mask : Hide On 
  847. End Proc
  848. Procedure PREFERENCES[CHOIX]
  849.    PRFV: Data "voice","sounds","language","speed","music"
  850.    PRF1: Data 0,0,6,0,10,7,1,"voice"
  851.    PRF2: Data 1,0,69,0,73,7,2,"sounds"
  852.    PRF3: Data 1,1,37,15,41,21,3,"Language"
  853.    PRF4: Data 0,2,6,30,13,35,8,"speed"
  854.    PRF5: Data 1,2,69,30,74,35,9,"music"
  855.    DRAPEAUX: Data 3,4,6,0,11,5,0,0,0,0,0,0,7
  856.    DIALECTES: Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  857.    SUITE_D_OPTIONS: Data 2,3,4,5,6,13,4,4,4,4,4,4,1
  858.    CLOCK[300,150] : B$="A.PeTdbacc" : BANQBI[B$,""] : ZB=Length(1)+1 : TB=10
  859.    ECR=Screen : ZCR=4
  860.    Screen Open ZCR,112,66,64,Lowres : Flash Off 
  861.    Screen ZCR : Flash Off : Get Palette ECR : Cls 0
  862.    Screen To Front ECR : Screen ZCR : Paste Bob 0,0,TB : Wait Vbl 
  863.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  864.       Read A,B,C,D,E,F,Z
  865.       If X=3
  866.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  867.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  868.       Else 
  869.          If PREF(X) : Paste Bob E,F,Z : End If 
  870.       End If 
  871.    Next : Get Bob ZCR,ZB,0,0 To 111,63 : Screen ECR
  872.    PARLE["Choose",2] : Hide On 
  873.    If CHOIX=0 : H=40 : V=73
  874.       For Z=1 To 64 Step 2
  875.          ZZ=Min(2*Z,112) : Get Bob ZCR,ZB,0,0 To ZZ,Z : Bob 1,H,V,ZB : Wait Vbl 
  876.       Next 
  877.    Else 
  878.       Bob 1,400,10,ZB : Wait Vbl 
  879.       If CHOIX=1
  880.          Limit Bob 1,0,0 To 224,200
  881.          Channel 1 To Bob 1 : Bob 1,222,120, : Wait Vbl 
  882.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  883.          H=110 : V=120
  884.       Else 
  885.          Limit Bob 1,158,0 To 400,200
  886.          Channel 1 To Bob 1 : Bob 1,36,120, : Wait Vbl 
  887.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  888.          H=148 : V=120
  889.       End If 
  890.    End If 
  891.    VIDCUR[0]
  892.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  893.       Read A,B,C,D,E,F,Z : Add E,H : Add F,V
  894.       If X=3
  895.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  896.          If Z=0 : Z=NBK+16 : End If : Bob X+1,E,F,Z
  897.       Else 
  898.          If PREF(X)
  899.             Bob X+1,E,F,Z
  900.          Else 
  901.             Bob X+1,E,F,NBK+16
  902.          End If : Wait Vbl 
  903.       End If 
  904.    Next : Bob 1,,,TB : Wait Vbl 
  905.    '
  906.    '
  907.    VIDCUR[0] : K=0
  908.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  909.       Read A,B,C,D,E,F,Z,P$ : Add C,H : Add D,V
  910.       CUR(A,B,0)=C : CUR(A,B,1)=D : CUR(A,B,2)=X : Z(X)=Z
  911.       If K<1
  912.          Bob BCUR,CUR(A,B,0),CUR(A,B,1),NBK+17 : Wait Vbl : PARLE[P$,2]
  913.          TEMPS=Timer+50 : Repeat : K=Mouse Key : Until Timer>TEMPS or K>1
  914.       End If 
  915.    Next 
  916.    While Mouse Key : Wend 
  917.    HCR=1 : VCR=2 : INICURS[1,1] : L$=LANGUE$
  918.    Do 
  919.       CURSEUR[0] : If BOUTONB Then MZ=0 : BOUTONB=False
  920.       Exit If MZ=0 or Not(BOUTONS)
  921.       If MZ=3
  922.          Restore SUITE_D_OPTIONS : For X=1 To PREF(3) : Read PREF(3) : Next 
  923.          Restore DIALECTES : For X=1 To PREF(3) : Read LANGUE$ : Next 
  924.          Restore DRAPEAUX : For X=1 To PREF(3) : Read Z : Next 
  925.          If Z=0 : Z=NBK+16 : End If 
  926.          Bob MZ+1,,,Z : Wait Vbl 
  927.       Else 
  928.          If PREF(MZ)
  929.             Bob MZ+1,,,NBK+16 : PREF(MZ)=0
  930.          Else 
  931.             Bob MZ+1,,,Z(MZ) : PREF(MZ)=1
  932.          End If 
  933.       End If : Wait Vbl 
  934.       Restore PRFV : For X=1 To MZ : Read P$ : Next : PARLE[P$,2]
  935.       While Mouse Key : Wend 
  936.    Loop 
  937.    FINDEPREF:
  938.    AJOUR : BRUITB[100] : Amal Off 15 : Bob BCUR,,,NBK+16 : Wait Vbl 
  939.    CX=1 : CY=0
  940.    Screen ZCR : Paste Bob 0,0,TB
  941.    For X=1 To 5 : Restore "PRF"+Str$(X)-" "
  942.       Read A,B,C,D,E,F,Z
  943.       If X=3
  944.          Restore DRAPEAUX : For XX=1 To PREF(3) : Read Z : Next 
  945.          If Z=0 : Z=NBK+16 : End If : Paste Bob E,F,Z
  946.       Else 
  947.          If PREF(X) : Paste Bob E,F,Z : End If 
  948.       End If 
  949.    Next 
  950.    Get Bob ZCR,ZB,0,0 To 111,64 : Screen ECR : Bob 1,,,ZB : Wait Vbl 
  951.    For X=2 To 6 : Bob X,,,NBK+16 : Next 
  952.    If CHOIX=0 : Screen ZCR
  953.       For Z=64 To 1 Step -4
  954.          ZZ=Min(2*Z,112)
  955.          Get Bob ZCR,ZB,0,0 To ZZ,Z : Screen ECR : Bob 1,40,73,ZB : Wait Vbl 
  956.       Next 
  957.       Bob 1,,,NBK+16 : Wait Vbl : Bob Off 1 : Wait Vbl 
  958.    Else 
  959.       Channel 1 To Bob 1 : Bob 1,,,Length(1) : Wait Vbl 
  960.       If CHOIX=1
  961.          Amal 1,"M 112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  962.       Else 
  963.          Amal 1,"M -112,0,28" : Amal On 1 : While Chanmv(1) : Wend 
  964.       End If 
  965.    End If : Screen Close ZCR
  966.    Limit Bob : Amal Off : Bob Off : AJOUR : CLOCK[300,150]
  967.    If L$<>LANGUE$
  968.       If CHOIX=0
  969.         A$="Decors/Entree"+LANGUE$ : PASSECRAN[A$,1,1,1]
  970.       End If 
  971.       If CHOIX=1
  972.          Load "banqueI/Titror"+LANGUE$+".ABK" : Paste Icon 20,48,TEST
  973.       End If 
  974.    End If 
  975.    BANQBI["",""]
  976. End Proc
  977. Procedure NETTOIE[BLK]
  978.    Update : Wait Vbl : Update Off 
  979.    Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl 
  980.    Bob Clear : Put Cblock BLK : Bob Draw : Screen Swap : Wait Vbl 
  981.    Update On 
  982. End Proc
  983. Procedure AUTOBLOC[N,X,Y]
  984.    Update : Update Off : Wait Vbl 
  985.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  986.    Bob Clear : Put Block N,X,Y : Bob Draw : Screen Swap : Wait Vbl 
  987.    Update On 
  988. End Proc
  989. Procedure ABLOC[N]
  990.    Update : Update Off : Wait Vbl 
  991.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  992.    Bob Clear : Put Block N : Bob Draw : Screen Swap : Wait Vbl 
  993.    Update On 
  994. End Proc
  995. Procedure AJOUR
  996.    Update : Wait Vbl : Update : Wait Vbl 
  997. End Proc
  998. Procedure TIRE[M]
  999.    If M=0 Then SA$="" : Pop Proc
  1000.    ' Tire un nombre parmi M et nouveau dans SA$     
  1001.    M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SA$,Str$(I)+" ")=0
  1002.    SA$=SA$+Str$(I)+" "
  1003. End Proc[I]
  1004. Procedure TIRB[M]
  1005.    If M=0 Then SB$="" : Pop Proc
  1006.    ' Tire un nombre parmi M et nouveau dans SB$     
  1007.    M=M-1 : Repeat : I=1+Rnd(M) : Until Instr(SB$,Str$(I)+" ")=0
  1008.    SB$=SB$+Str$(I)+" "
  1009. End Proc[I]
  1010. Procedure AFFECTE[DEB,NOMB,IMAGE]
  1011.    ' DEB : premier indice, NOMB : nombre total, premier compris 
  1012.    ' IMAGE: l'image ∩┐╜ affecter
  1013.    Repeat : N=DEB+Rnd(NOMB-1) : Until 0=ZBI(N) : ZBI(N)=IMAGE
  1014. End Proc[N]
  1015. Procedure VIDE
  1016.    Update : Bob Update Off : Wait Vbl 
  1017.    For N=1 To NB : Bob N,H(N),V(N),NBK+16 : Wait Vbl : Next 
  1018.    Update : Bob Update On 
  1019. End Proc
  1020. Procedure PLACE
  1021.    Update : Bob Update Off : Wait Vbl 
  1022.    For N=1 To NB : Bob N,H(N),V(N),ZBI(N) : Wait Vbl : Next 
  1023.    Update : Bob Update On 
  1024. End Proc
  1025. Procedure VOISTEST
  1026.    If(ETAPE>1) and(Screen=3)
  1027.       DROITE[3,45]
  1028.    Else 
  1029.       TPTS(TEST)=0 : METTOTAL["+",0,XT,YT] : DROITE[Screen,235] : DC=190
  1030.       S=Screen : Screen Open 3,450,270,64,Lowres : Flash Off : Get Palette S
  1031.       Screen To Front S : Screen Copy S,190,0,640,270 To 3,0,0
  1032.       Screen Offset 3,85,0 : Screen Close S : Double Buffer 
  1033.       Erase 7 : Reserve As Chip Work 7,65000
  1034.       A$="MRbruits/Brt4.sbk" : If Not(Exist(A$)) : A$="df0:Brt4.sbk" : End If 
  1035.       Load A$,7
  1036.    End If 
  1037. End Proc
  1038. Procedure POSEVAR
  1039.    Screen Open 7,32,10,16,Lowres : Flash Off : Screen Hide 7 : Screen 7
  1040.    For X=1 To 5 : Doke Phybase(0)+2*(X-1),PREF(X) : Next 
  1041.    For X=1 To 4 : Doke Phybase(0)+8+2*X,TPTS(X) : Next 
  1042. End Proc
  1043. Procedure PRENDVAR
  1044.    Screen Hide 7 : Screen 7
  1045.    For X=1 To 5 : PREF(X)=Deek(Phybase(0)+2*(X-1)) : Next 
  1046.    For X=1 To 4 : TPTS(X)=Deek(Phybase(0)+8+2*X) : Next 
  1047.    Data "Ang","Ang","All","Fra","Esp","Ita","","","","","","","Jap"
  1048.    Restore : For X=1 To PREF(3) : Read LANGUE$ : Next 
  1049.    Screen Close 7
  1050. End Proc
  1051. Procedure RETOUR
  1052.    Erase 1 : Erase 2 : Del Block : Del Cblock 
  1053.    S=Screen : Screen Open 2,360,270,64,Lowres : Flash Off 
  1054.    Get Palette S : Screen To Front S
  1055.    Screen Copy S,0,0,360,270 To 2,0,0 : Screen Close S
  1056.    CLOCK[280,60] : Load Iff "Decors/Entree"+LANGUE$,1
  1057.    Flash Off : Screen To Front 2
  1058.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1059.    Screen 2 : Autoback 0 : Screen To Front 2 : N=0 : D=2
  1060.    BRUIT[0,0,"antizoom"]
  1061.    For X=0 To 130 Step 1 : Repeat 
  1062.          H1=X : H2=X+D : H4=350-X : H3=H4-D
  1063.          V1=X : V2=X+D : V4=270-X : V3=V4-D
  1064.          Screen Copy 1,H1,V1,H4,V2 To 2,H1,V1
  1065.          Screen Copy 1,H3,V2,H4,V4 To 2,H3,V2
  1066.          Screen Copy 1,H1,V3,H3,V4 To 2,H1,V3
  1067.          Screen Copy 1,H1,V2,H2,V3 To 2,H1,V2
  1068.          Wait Vbl : Screen Swap : Inc N
  1069.    Until N>1 : Next 
  1070.    Screen Close 2
  1071.    Colour 0,0 : Colour Back 0 : Wait Vbl : View 
  1072.    POSEVAR : Screen 1 : A$="A48.amos" : If Exist("df0:"+A$) Then A$="DF0:"+A$
  1073.    Run A$
  1074. End Proc
  1075. '
  1076. Procedure XY
  1077.    X0=0 : Y0=0 : Change Mouse 1 : Show On : Limit Mouse 
  1078.    Repeat 
  1079.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1080.       If X<>X0 or Y<>Y0
  1081.          Locate 35,1 : Print X;"  " : Locate 35,2 : Print Y;"  "
  1082.          X0=X : Y0=Y
  1083.       End If 
  1084.       K$=Inkey$ : Exit If K$<>""
  1085.    Until Mouse Key
  1086. End Proc